package com.spirng.leetcode.day08;


import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadPoolExecutor;

public class Test93 {
    public static void main(String[] args) {
//        new ThreadPoolExecutor();
        String s="25525511135";
//        StringBuilder stringBuilder = new StringBuilder(s);
//        stringBuilder.insert(1, ".");
//        stringBuilder.replace(1,2,"");
        Test93 test93 = new Test93();
        test93.restoreIpAddresses(s);
    }
    ArrayList lists=new ArrayList<String>();
    public List<String> restoreIpAddresses(String s) {
        backtracking(s,0,0);
         return lists;
    }
    public void backtracking(String s,int startSize,int size){
        if(size==3){
            if (isValid(s,startSize,s.length()-1)) {
                lists.add(s);
            }
            return;
        }
        for (int i = startSize; i < s.length(); i++) {
           if(isValid(s,startSize,i)){
                 s=s.substring(0,i+1)+"."+s.substring(i+1);
                 size++;
                 backtracking(s,i+2,size);
                 s=s.substring(0,i+1)+s.substring(i+2);
                 size--;
           }else {
               break;
           }

        }
    }
    public boolean isValid(String res,int start,int end){
       if(start>end){
           return false;
       }
       if(res.charAt(start)=='0'&&start!=end){
           return false;
       }
       int num=0;
       for (int i=start;i<=end;i++){
           if(res.charAt(i)>'9'||res.charAt(i)<'0'){
               return false;
           }
           num=num*10+(res.charAt(i)-'0');
           if(num>255){
               return false;
           }
       }
         return true;
    }
    private Boolean isValid1(String s, int start, int end) {
        if (start > end) {
            return false;
        }
        if (s.charAt(start) == '0' && start != end) { // 0开头的数字不合法
            return false;
        }
        int num = 0;
        for (int i = start; i <= end; i++) {
            if (s.charAt(i) > '9' || s.charAt(i) < '0') { // 遇到⾮数字字符不合法
                return false;
            }
            num = num * 10 + (s.charAt(i) - '0');
            if (num > 255) { // 如果⼤于255了不合法
                return false;
            }
        }
        return true;
    }
}
